package com.ssy.lingxi.order.service.base;

import com.ssy.lingxi.order.model.bo.OrderIdBO;
import com.ssy.lingxi.order.model.constant.DeliveryOperationEnum;
import com.ssy.lingxi.order.model.constant.DeliveryOrderOuterStatusEnum;
import com.ssy.lingxi.order.model.constant.OrderMemberTypeEnum;
import com.ssy.lingxi.order.model.constant.ReceiveOrderOuterStatusEnum;
import com.ssy.lingxi.order.model.vo.basic.response.DeliveryOuterHistoryVO;

import java.util.List;

/**
 * 送货计划相关外部流转记录接口
 * @author czh
 * @version 2.0.0
 * @date 2021-07-19
 */
public interface IBaseDeliveryHistoryService {
    /**
     * 保存采购商送货相关外部流转记录
     * @param memberId 登录用户会员Id
     * @param roleId    登录用户会员角色Id
     * @param userName 登录用户姓名
     * @param organizationName 登录用户组织机构名称
     * @param roleName 操作角色
     * @param orderId 订单Id
     * @param orderNo 订单编号
     * @param operation  操作类型枚举
     * @param status 外部状态
     * @param remark    备注
     * @param deliveryHistoryType 外部流转类型
     */
    void saveBuyerOuterHistory(Long memberId, Long roleId, String userName, String organizationName, String roleName, Long orderId, String orderNo, DeliveryOperationEnum operation, Integer status, String remark, Integer deliveryHistoryType);


    /**
     * 保存供应商送货相关外部流转记录
     * @param memberId 登录用户会员Id
     * @param roleId    登录用户会员角色Id
     * @param userName 登录用户姓名
     * @param organizationName 登录用户组织机构名称
     * @param roleName 操作角色
     * @param orderId 订单Id
     * @param orderNo 订单编号
     * @param operation  操作类型枚举
     * @param status 外部状态
     * @param remark    备注
     * @param deliveryHistoryType 外部流转类型
     */
    void saveVendorOuterHistory(Long memberId, Long roleId, String userName, String organizationName, String roleName, Long orderId, String orderNo, DeliveryOperationEnum operation, Integer status, String remark, Integer deliveryHistoryType);

    /**
     * 保存供应商送货单相关外部流转记录
     * @param memberId 登录用户会员Id
     * @param roleId    登录用户会员角色Id
     * @param userName 登录用户姓名
     * @param organizationName 登录用户组织机构名称
     * @param roleName 操作角色
     * @param orderId 订单Id
     * @param orderNo 订单编号
     * @param operation  操作类型枚举
     * @param statusEnum 送货单状态
     * @param remark    备注
     * @param deliveryHistoryType 外部流转类型
     */
    void saveVendorOuterHistoryByDeliveryOrder(Long memberId, Long roleId, String userName, String organizationName, String roleName, Long orderId, String orderNo, DeliveryOperationEnum operation, DeliveryOrderOuterStatusEnum statusEnum, String remark, Integer deliveryHistoryType);

    /**
     * 保存供应商送货单相关外部流转记录
     * @param memberId 登录用户会员Id
     * @param roleId    登录用户会员角色Id
     * @param userName 登录用户姓名
     * @param organizationName 登录用户组织机构名称
     * @param roleName 操作角色
     * @param orderId 订单Id
     * @param orderNo 订单编号
     * @param operation  操作类型枚举
     * @param statusEnum 收货单状态
     * @param remark    备注
     * @param deliveryHistoryType 外部流转类型
     */
    void saveVendorOuterHistoryByReceiveOrder(Long memberId, Long roleId, String userName, String organizationName, String roleName, Long orderId, String orderNo, DeliveryOperationEnum operation, ReceiveOrderOuterStatusEnum statusEnum, String remark, Integer deliveryHistoryType);

    /**
     * （批量）保存送货相关外部流转记录
     * @param memberId 登录用户会员Id
     * @param roleId    登录用户会员角色Id
     * @param userName 登录用户姓名
     * @param organizationName 登录用户组织机构名称
     * @param roleName 操作角色
     * @param orderIds 订单Id与编号列表
     * @param memberType 订单会员类型
     * @param operation  操作类型枚举
     * @param status 外部状态
     * @param statusName 外部状态名称
     * @param remark    备注
     * @param deliveryHistoryType 外部流转类型
     */
    void saveDeliveryOuterHistory(Long memberId, Long roleId, String userName, String organizationName, String roleName, List<OrderIdBO> orderIds, OrderMemberTypeEnum memberType, DeliveryOperationEnum operation, Integer status, String statusName, String remark,Integer deliveryHistoryType);

    /**
     * 查询送货相关外部流转记录
     * @param orderId 订单Id
     * @param deliveryHistoryType 流转记录 DeliveryHistoryTypeEnum
     * @return 外部流转记录
     */
    List<DeliveryOuterHistoryVO> listDeliveryOuterHistory(Long orderId,Integer deliveryHistoryType);

}
